package com.example.aicodehelper.AI;


import jakarta.annotation.Resource;
import org.springframework.http.MediaType;
import org.springframework.http.codec.ServerSentEvent;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;

@RestController
@RequestMapping("/ai-chat")
public class AiChatController {


    @Resource
    private AiCodeHelperService aiCodeHelperService;

    @Resource
    private AiCodeHelperServiceImpl aiCodeHelperServiceImpl;


    /**
     * 注意：这个接口要返回SSE格式的数据，以便前端接收之后可以使用AntDesignXVue库中的XStream处理，如果不是SSE格式的数据就会报错，导致看不到Ai对话回复
     * 在这里使用ServerSentEvent封装（这样更规范），当然也可以纯flux
     *
     * @param userMessage
     * @return
     */
    @PostMapping(value = "/flux-stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux<String> chatWithAi(@RequestBody String userMessage) {

        return aiCodeHelperServiceImpl.streamChat(userMessage)
                .doOnSubscribe(sub ->
                        System.out.println("开始处理用户请求: " + userMessage))
                .doOnComplete(() ->
                        System.out.println("流式处理完成"))
                .doOnError(e ->
                        System.err.println("处理错误: " + e.getMessage()));
//        return aiCodeHelperService.chat(userMessage);
    }

}
